package com.eastfair.datasync.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.eastfair.core.httpClient.PostHttpClient;
import com.eastfair.datasync.entity.CanalData;
import com.eastfair.datasync.enumeration.MysqlBusinessEnum;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CanalUtil {

    public static CanalData parseData(String msg, Class c) {
        CanalData canalData = new CanalData();
        JSONObject jsonObject = JSONObject.parseObject(msg);
        String type = jsonObject.getString("type");
        canalData.setMysqlBusinessEnum(MysqlBusinessEnum.get(type));
        List<Object> objectList = new ArrayList<>();
        JSONArray jsonArray = jsonObject.getJSONArray("data");
        if (jsonArray != null) {
            for (int i = 0; i < jsonArray.size(); i++) {
                Object object = jsonArray.getObject(i, c);
                objectList.add(object);
            }
        }
        canalData.setObjectList(objectList);
        canalData.setTableName(jsonObject.getString("table"));
        canalData.setDataBase(jsonObject.getString("database"));
        return canalData;
    }


    public static CanalData parseDataOfJson(String msg) {
        CanalData canalData = new CanalData();
        JSONObject jsonObject = JSONObject.parseObject(msg);
        String type = jsonObject.getString("type");
        canalData.setMysqlBusinessEnum(MysqlBusinessEnum.get(type));
        List<JSONObject> objectList = new ArrayList<>();
        JSONArray jsonArray = jsonObject.getJSONArray("data");
        if (jsonArray != null) {
            for (int i = 0; i < jsonArray.size(); i++) {
                objectList.add(jsonArray.getJSONObject(i));
            }
        }
        canalData.setObjectList(objectList);
        canalData.setTableName(jsonObject.getString("table"));
        canalData.setDataBase(jsonObject.getString("database"));
        return canalData;
    }
}
